<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    /**
1.找到完成至少totalTrips趟派达需安化负以取早小时间min作为二分查找的左边界left
2.首先可以找到完成一趟旅途所需要化'吃.涂龙弗的最多时间作为二分查找的右边界right
3.然后可以通过计算totalTrips * min 大存丛狙旅论数目trios
4.计算中间时间middle 以及在middle内能完成得旅途数目trips
5.如果trips 大于totalTrips，老明middle内不足以完成约定的旅途，继续向左查找  
6.如果trips 小于totalTrips，表明middle内不足以完成约定的旅途，继续向右查找
     */
    var minimumTime = function (time, totalTrips) {
      // 找到最小值 left
      let left = Math.min(...time);
      // 找到最大值 right 也就是最小值 min * totalTrips
      let right = totalTrips * left;
      // 使用二分查找筛选符合的条件
      while (left < right) {
        let middle = left + Math.floor((right - left) / 2);
        let trips = 0;
        // 遍历每个车次需要完成的时间
        for (const t of time) {
          // 计算可以完成的旅途数
          trips += Math.floor(middle / t);
          if (trips >= totalTrips) break;
        }
        // 如果超过 totalTrips，缩小到前半部分继续向左查找，反之缩小到后半部分向右查找  
        if (trips >= totalTrips) {
          right = middle;
        } else {
          left = middle + 1;
        }
      }
      return left;
    };
    console.log(minimumTime(time = [1, 2, 3], totalTrips = 5))
  </script>
</body>

</html>